import time

from DaySix.chatAiConfig import chatAiConfigInit, chatAiConfigGet
from DaySix.chatAiGetInput import getUserInput
from DaySix.chatAiLog import chatAiLogInit, chatAiLog, chatAiLogEnable
from DaySix.chatAiPost import chatAiPost
from DaySix.chatAiStore import chatAiDbInit, chatAiAdd




class chatBot:
    def __init__(self):
        # 初始化配置模块
        chatAiConfigInit('./chatAi.ini')

        # 初始化日志模块（使用新函数名chatAiLogInit）
        log_path = chatAiConfigGet('log_file')
        chatAiLogInit(log_path)  # 注意使用新的日志初始化函数
        chatAiLog('INFO', '日志模块初始化完成')

        # 初始化存储模块（使用chatAiDbInit）
        db_path = chatAiConfigGet('log_db')
        chatAiDbInit(db_path)
        chatAiLog('INFO', '存储模块初始化完成')

        # 初始化对话历史记录
        self.history = []
        self.max_history = int(chatAiConfigGet('chat_his'))  # 获取最大对话轮数
        chatAiLog('DEBUG', f'最大历史记录轮数: {self.max_history}')

    def _update_history(self, role, content):
        """更新对话历史记录并控制长度"""
        self.history.append({"role": role, "content": content})

        # 计算最大保留记录数（每轮包含user和assistant各1条）
        max_items = self.max_history * 2
        if len(self.history) > max_items:
            # 保留最近的N轮对话（删除最旧的记录）
            self.history = self.history[-max_items:]
            chatAiLog('DEBUG', '历史记录已截断')

    def _stream_callback(self, data):
        """流式数据回调函数"""
        print(data, end='', flush=True)  # 打字机效果
        chatAiLog('TRACE', f'收到流数据: {data}')

    def _complete_callback(self, data):
        """完成回调函数"""
        # 添加AI回复到历史记录
        chatAiAdd('assistant', data)
        self._update_history('assistant', data)
        print()  # 换行符

        # 记录存储状态
        chatAiLog('INFO', 'AI回复已存储')

    def start_chat(self):
        """启动聊天循环"""
        chatAiLog('INFO', '对话系统启动')
        chatAiLogEnable(True)  # 启用控制台日志输出

        while True:
            # 获取用户输入（注意函数名大小写）
            user_input = getUserInput("用户：")  # 严格使用指定的函数名

            # 退出条件判断
            if user_input.strip().lower() == 'exit':
                chatAiLog('INFO', '收到退出指令')
                print("对话已结束")
                break

            # 记录用户输入
            chatAiAdd('user', user_input)
            self._update_history('user', user_input)
            chatAiLog('DEBUG', '用户输入已存储')

            # 准备请求数据（始终包含完整历史记录）
            request_data = self.history[-self.max_history * 2:]  # 保留N轮对话
            chatAiLog('DEBUG', f'请求数据: {request_data}')

            # 发送AI请求
            chatAiPost(
                url=chatAiConfigGet('fast_url'),
                key=chatAiConfigGet('fast_key'),
                data=request_data,
                OnDataProcess=self._stream_callback,
                OnDataFinish=self._complete_callback
            )
            chatAiLog('INFO', '已发送AI请求')


if __name__ == "__main__":
    bot = chatBot()
    bot.start_chat()